#include <iostream>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
using std::cout;
using std::endl;

static int cnt = 0;

// 这个函数可以选择面向对象封装，实例化对象HandlerSignal对象，实现应对不同信号的方法，对象内创建任务表，把任务分发到signal处理函数中，完成任务处理
void handlerAlarm(int sig)
{
    if (++cnt == 5)
        abort();
    alarm(1);
}

void handlerAbort(int sig)
{
    cout << "handler abort, signal id: " << sig << '\n';
}

int main()
{
    signal(SIGALRM, handlerAlarm);
    signal(SIGABRT, handlerAbort);
    alarm(1);
    while (1)
    {
        cout << "cnt: " << cnt << '\n';
        // sleep(1);
        pause(); // 等待信号唤醒
    }

    return 0;
}

